#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math;
namespace Cephei.QL
{
    /// <summary> 
	/// ! This class describes a stochastic process governed by \f[ dx_t = \mu(t, x_t)dt + \sigma(t, x_t)dW_t. \f]
	/// </summary>
    [Guid ("9B18388A-E12E-4125-B82E-C4973795A94F"),ComVisible(true)]
	public interface IStochasticProcess1D : Cephei.QL.IStochasticProcess
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double Apply(Double x0, Double dx);
        /// <summary> 
		/// 
		/// </summary>
		 Double Diffusion(Double t, Double x);
        /// <summary> 
		/// 
		/// </summary>
		 Double Drift(Double t, Double x);
        /// <summary> 
		/// 
		/// </summary>
		 Double Evolve(Double t0, Double x0, Double dt, Double dw);
        /// <summary> 
		/// 
		/// </summary>
		 Double Expectation(Double t0, Double x0, Double dt);
        /// <summary> 
		/// 
		/// </summary>
		 Double StdDeviation(Double t0, Double x0, Double dt);
        /// <summary> 
		/// 
		/// </summary>
		 Double Variance(Double t0, Double x0, Double dt);
        /// <summary> 
		/// 
		/// </summary>
		 Double X0 {get;}
    }   

    /// <summary> 
	/// ! This class describes a stochastic process governed by \f[ dx_t = \mu(t, x_t)dt + \sigma(t, x_t)dW_t. \f] Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IStochasticProcess1D_Factory : INativeCollection_Factory<IStochasticProcess1D>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary>
        /// Create a hybrid Vector of IStochasticProcess1D, with event notification of changes
        /// </summary>
        /// <returns>a new Vector&ltIStochasticProcess1D&gt</returns>
        IVector<IStochasticProcess1D> CreateVector();
        /// <summary>
        /// Create a hybrid Vector of ICell of IStochasticProcess1D, with event notification of changes
        /// </summary>
        /// <returns>a new ICell&ltIVector&ltI&ltIStochasticProcess1D&gt&gt&gt</returns>
        ICoCell<IVector<ICoCell<IStochasticProcess1D>>> CreateCellVector();
        IVector<IStochasticProcess1D> CreateVector (IEnumerable<IStochasticProcess1D> source);
        ICoCell<IVector<ICoCell<IStochasticProcess1D>>> CreateCellVector (IEnumerable<ICoCell<IStochasticProcess1D>> source);
    }
}

